#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include "temps.h"
#include"gestion_stock.h"
#include "menu.h"


void saisir_produit(produit *p,int h)/*saisie du produit en cas d'ajout/modification*/
{  
   
   printf("donner  le nom du produit\n");
   fflush(stdin);
   scanf("%s",p->nom);
   printf("donner l'id du prooduit\n");
   scanf("%d",&p->id);
   printf("donner la contit à modifier (ajou/supp)\n");
   scanf("%d",&p->cont);
  
   p->last=h;
   p->h=heure();
   p->m=minute();
   p->s=sec();
    

  }



void ajout_produit(produit *p,int h){/*fonction ajout/modification  */
FILE *stock;/*le fichier stock*/
FILE *stockt;/*le fichier temporel stockt*/
int he,m,s,choix;
   he=heure();/* appel à la fonction heure ,minute et sec de temps.h qu'ils retournent les valeurs entiers du temps courant*/
   m=minute();
   s=sec();
produit *x;

int test=1,y;
x=malloc(sizeof(produit));


stock=fopen("stock.txt","r+");
stockt=fopen("stockt.txt","w");
if(stock!=NULL) 
	{ while (fscanf(stock,"%s %d %d %d %d %d %d",x->nom,&x->id,&x->cont,&x->last,&x->h,&x->m,&x->s)!=EOF) {/*test fin du fichier*/
	     
	     if((x->id!=p->id)&&(strcmp(x->nom,p->nom)!=0))/* si les produits du stock.txt different du produit à ajouter/modifier on les copie dans stockt.txt*/
             fprintf(stockt,"%s %d %d %d %d %d %d",x->nom,x->id,x->cont,x->last,x->h,x->m,x->s);
	                  
		
	     else if (((x->id==p->id)&&((strcmp(x->nom,p->nom)!=0)))||((x->id!=p->id)&&(strcmp(x->nom,p->nom)==0))){/*id1=id2 et nom1!=nom2 ou l'inverse*/  
			do {printf("cet id correspond au produit %s\t \n-1-vous voulez le remplacer par le produit %s\n -2-ajouter cette quantité au produit %s\n-3-ne faire rien",x->nom,p->nom,x->nom); /*on propose 3 choix remplacer l'ancien produit par le nouveau,ajouter la quantité a l'ancien produit ou ne rien faire*/ 
			fflush(stdin);scanf("%d",&choix);}while((choix!=2)&&(choix!=1)&&(choix!=3));
			if (choix==1){				
			test=0;		    /*remplacement/////le test c'est un entier indiquant si on a trouver une solution avec ce produit*/   
			fprintf(stockt,"%s %d %d %d %d %d %d",p->nom,p->id,p->cont,h,he,m,s);}
                        if (choix==2) {				
			y=(p->cont)+(x->cont);
			test=0;		    /*ajout de la quantité*/
			fprintf(stockt,"%s %d %d %d %d %d %d",x->nom,x->id,y,h,he,m,s);} 
			    if (choix==3){ fprintf(stockt,"%s %d %d %d %d %d %d",x->nom,x->id,x->cont,x->last,x->h,x->m,x->s);/*copier l'ancien produit comme il est */
					   test=0;	 }                   
			}
				
              else if  ((x->id==p->id)&&((strcmp(x->nom,p->nom)==0))){ y=(p->cont)+(x->cont);/*s'il ya une correspondance totale entre l'ancien et le nouveau produit on addition 
										la quantité*/
			test=0;		    
			fprintf(stockt,"%s %d %d %d %d %d %d",x->nom,x->id,y,h,x->h,x->m,x->s);}        
	     }
           
            if ((fscanf(stock,"%s %d %d %d %d %d %d",x->nom,&x->id,&x->cont,&x->last,&x->h,&x->m,&x->s)==EOF)&&(test==1))/*si le produit n'existe pas on l'ajout à stockt*/
               fprintf(stockt,"%s %d %d %d %d %d %d",p->nom,p->id,p->cont,h,he,m,s);
}
else printf("ERREUR fichier introuvalble\n");

fclose(stock);
fclose(stockt);
remove("stock.txt");  /*on suppprime l'ancien fichier stock et on le remplace par stockt en changeant son nom par stock*/
rename("stockt.txt","stock.txt");}


void supprimer_produit(int id,int h)
{FILE *stock;
FILE *stockt;



int test=1;
produit *x;
 x=malloc(sizeof(produit));
 

stock=fopen("stock.txt","r+");
stockt=fopen("stockt.txt","w");


if(stock!=NULL) { /*test fin du fichier*/
	while ((fscanf(stock,"%s %d %d %d %d %d %d",x->nom,&x->id,&x->cont,&x->last,&x->h,&x->m,&x->s)!=EOF)&&test==1) 
			{ 
	     if(x->id!=id){   /* recopier tout les produit sauf le produit ayant le meme id*/

             fprintf(stockt,"%s %d %d %d %d %d %d",x->nom,x->id,x->cont,x->last,x->h,x->m,x->s);
	     test=0;}
	         
}
if(test==1) printf("le produit  n'existe pas ou il se trouve avec un autre id\n");/*si test ==1 alors on a pas trouver ce produit*/
	else printf("le produit %s est supprimé avec succes \n",x->nom);}

else printf("ERREUR fichier introuvalble\n");

fclose(stock);
fclose(stockt);
remove("stock.txt");
rename("stockt.txt","stock.txt");}



void afficher_stock(void)
{ FILE *stock;
  produit *x;

  x=malloc(sizeof(produit));
  
stock=fopen("stock.txt","r");
if(stock!=NULL){

while (fscanf(stock,"%s %d %d %d %d %d %d",x->nom,&x->id,&x->cont,&x->last,&x->h,&x->m,&x->s)!=EOF) {/*test fin du fichier et lecture du structure produit*/
     
	printf("Nom du produit   %s \n id du produit %d  \n stock de %d paquet\nla derniere modification étais par la personne d'id %d\n à %d:%d:%d \n",x->nom,x->id,x->cont,x->last,x->h,x->m,x->s);				/*affichage*/
       
        printf("\t-------------------------------------\n");}
 }
else printf("ERREUR fichier introuvalble");

fclose(stock);}
void afficher_produit(produit *p)
{ 

FILE *stock=NULL;
  produit *x;
  x=malloc(sizeof(produit));
    

int y=0;

stock=fopen("stock.txt","r+");
if(stock!=NULL){while (fscanf(stock,"%s %d %d %d %d %d %d",x->nom,&x->id,&x->cont,&x->last,&x->h,&x->m,&x->s)!=EOF) {/*test fin du fichier et lecture du structure produit*/
	     
	     if(x->id==p->id){/*si le produit existe on l'affiche et on met y=1(test)*/
              y=1;
             printf("Nom du produit   %s \n id du produit %d  \n stock de %d paquet\nla derniere modification étais par la personne d'id %d\n à %d:%d:%d \n",x->nom,x->id,x->cont,x->last,x->h,x->m,x->s);
	            
		 break;  } }
             if (y==0) printf("ce produit n'existe pas");/*y=0 on n'a pas trouver ce prduit*/
}  
		else printf("ERREUR fichier introuvalble");

fclose(stock);}
	    
int gestion_du_stock(int h)
{ produit *p,*p1;

  int choix,x,menu;
  char a[100];
 p=malloc(sizeof(produit));
 p1=malloc(sizeof(produit));
 


do {printf("****************MENU STOCK**************** \n\t1-ajouter/modifier un produit\n\t2-supprimer un produit\n\t3-afficher le stock\n\t4-afficher les info sur un produit\n\t5-retour\n\t0-sortir\n");
fflush(stdin);
scanf("%s",a);
choix=atoi(a);
switch (choix){
case 1:
{saisir_produit(p,h);
ajout_produit(p,h);}
break;
case 2 :

printf("donner l'id du produit à supprimer");
scanf("%d",&x);
supprimer_produit(x,h);
break;
case 3:
afficher_stock();
break;
case 4 :  saisir_produit(p,h);
         afficher_produit(p);
break;

case 5: return 1;

case 0: x=0;return 0; 
default: printf("\nmauvais choix");

	  	
} }
while (((choix!=0)||(strcmp(a,"0")!=0))||(x!=1) );/*controle de saisie ****char/int*/

 return x;
 
}





		
